/*
 *  $Id: Manager.cs 1204 2010-11-22 19:50:21Z thenn.erannor $
 *  This file is a part of Ragima CCG.
 *  (C) 2008-2010 Ragima development group.
 *
 *  Licensed under the terms of the GNU GPL License version 2.
 *
 */

using System.Collections.Generic;

namespace Ragima.UI {
    /// <summary>
    /// Менеджер ресурсов: регистратор провайдеров и поиск ресурса по ним.
    /// </summary>
    public static class ResourceManager {
        private static readonly List<IResourceProvider> _providers = new List<IResourceProvider>();

        /// <summary>
        /// Регистрирует провайдер ресурсов.
        /// </summary>
        public static void RegisterProvider(IResourceProvider provider) {
            if (!_providers.Contains(provider))
                _providers.Add(provider);
        }
        /// <summary>
        /// Отменяет регистрацию провайдера ресурсов.
        /// </summary>
        public static void UnregisterProvider(IResourceProvider provider) {
            _providers.Remove(provider);
        }

        /// <summary>
        /// Ищет и выдает ресурс по его идентификатору во всех зарегистрированных провайдерах.
        /// </summary>
        public static T GetResource<T>(string id) where T : class {
            foreach (var provider in _providers) {
                T resource = provider.GetResource<T>(id);
                if (resource != null)
                    return resource;
            }
            return null;
        }
    }
}
